This R Markdown allows to reproduce the results from the article “Temporal Networks of Contrafacta in the First Three Troubadour Generations” by Stefano Milonia and Matteo Mazzamurro. All data can be found in the appropriate folder in the same GitHub project. The code is structured as follows:
Packages
Data
Network of Songs
Networks of Authors
A number of R packages are necessary for the smooth running of the code. The fundamental package is the “tsna” (Skye Bender-deMoll and Martina Morris (2021). tsna : Tools for Temporal Social Network Analysis. R package version 0.3.5. http://statnet.org/).
#network packages
library(sna)
## Loading required package: statnet.common
##
## Attaching package: 'statnet.common'
## The following object is masked from 'package:base':
##
## order
## Loading required package: network
## network: Classes for Relational Data
## Version 1.16.0 created on 2019-11-30.
## copyright (c) 2005, Carter T. Butts, University of California-Irvine
## Mark S. Handcock, University of California -- Los Angeles
## David R. Hunter, Penn State University
## Martina Morris, University of Washington
## Skye Bender-deMoll, University of Washington
## For citation information, type citation("network").
## Type help("network-package") to get started.
## sna: Tools for Social Network Analysis
## Version 2.5 created on 2019-12-09.
## copyright (c) 2005, Carter T. Butts, University of California-Irvine
## For citation information, type citation("sna").
## Type help(package="sna") to get started.
library(tsna)
## Loading required package: networkDynamic
##
## networkDynamic: version 0.10.1, created on 2020-01-16
## Copyright (c) 2020, Carter T. Butts, University of California -- Irvine
## Ayn Leslie-Cook, University of Washington
## Pavel N. Krivitsky, University of Wollongong
## Skye Bender-deMoll, University of Washington
## with contributions from
## Zack Almquist, University of California -- Irvine
## David R. Hunter, Penn State University
## Li Wang
## Kirk Li, University of Washington
## Steven M. Goodreau, University of Washington
## Jeffrey Horner
## Martina Morris, University of Washington
## Based on "statnet" project software (statnet.org).
## For license and citation information see statnet.org/attribution
## or type citation("networkDynamic").
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5 v purrr 0.3.4
## v tibble 3.1.1 v dplyr 1.0.6
## v tidyr 1.1.3 v stringr 1.4.0
## v readr 1.4.0 v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(igraph)
##
## Attaching package: 'igraph'
## The following objects are masked from 'package:dplyr':
##
## as_data_frame, groups, union
## The following objects are masked from 'package:purrr':
##
## compose, simplify
## The following object is masked from 'package:tidyr':
##
## crossing
## The following object is masked from 'package:tibble':
##
## as_data_frame
## The following objects are masked from 'package:sna':
##
## betweenness, bonpow, closeness, components, degree, dyad.census,
## evcent, hierarchy, is.connected, neighborhood, triad.census
## The following objects are masked from 'package:network':
##
## %c%, %s%, add.edges, add.vertices, delete.edges, delete.vertices,
## get.edge.attribute, get.edges, get.vertex.attribute, is.bipartite,
## is.directed, list.edge.attributes, list.vertex.attributes,
## set.edge.attribute, set.vertex.attribute
## The following objects are masked from 'package:stats':
##
## decompose, spectrum
## The following object is masked from 'package:base':
##
## union
library(network)
library(networkDynamic)
library(visNetwork)
library(ndtv)
## Loading required package: animation
##
## ndtv: version 0.13.0, created on 2019-05-21
## Copyright (c) 2019, Skye Bender-deMoll, University of Washington
## with contributions from
## Martina Morris, University of Washington
## Based on "statnet" project software (statnet.org).
## For license and citation information see statnet.org/attribution
## or type citation("ndtv").
#data cleaning
library(plyr)
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
##
## Attaching package: 'plyr'
## The following objects are masked from 'package:dplyr':
##
## arrange, count, desc, failwith, id, mutate, rename, summarise,
## summarize
## The following object is masked from 'package:purrr':
##
## compact
## The following object is masked from 'package:network':
##
## is.discrete
library(dplyr)
#visuals
library(ggplot2)
library(ggrepel)
library(hrbrthemes)
## NOTE: Either Arial Narrow or Roboto Condensed fonts are required to use these themes.
## Please use hrbrthemes::import_roboto_condensed() to install Roboto Condensed and
## if Arial Narrow is not on your system, please see https://bit.ly/arialnarrow
library(ggpubr)
##
## Attaching package: 'ggpubr'
## The following object is masked from 'package:plyr':
##
## mutate
The raw data is taken from the Bibliografia Elettronica dei Trovatori (Asperti, S. and de Nigro, L. (2012). Bibliografia Elettronica dei Trovatori – v. 2-5-2012. Available at: http://www.bedt.it/BEdT_04_25/). The data has been checked to ensure it is temporally consistent and can be used to construct temporal networks.
contrafacta_and_analogies_with_dates<-read.csv("./data/contrafacta_and_analogies_with_dates.csv",sep=",",stringsAsFactors=FALSE)
First construct dataframes of the links and node in the network. Links from a model song to a contrafactum are directed and are shown as solid arrows. Links between songs with metrical analogies are bidirectional and shown as dashed arrows.
#contrafacta links
contrafacta<-data.frame(
"from"=contrafacta_and_analogies_with_dates$model_id,
"to"=contrafacta_and_analogies_with_dates$contrafactum_id,
"title"=paste(contrafacta_and_analogies_with_dates$model_id,"-->",contrafacta_and_analogies_with_dates$contrafactum_id))
contrafacta<-na.omit(contrafacta)
contrafacta<-distinct(contrafacta)
contrafacta$dashes<-FALSE
contrafacta$arrows<-"to"
#metrical analogies links
analogies<-data.frame(
"from"=contrafacta_and_analogies_with_dates$model_id,
"to"=contrafacta_and_analogies_with_dates$metrical_affinities_id,
"title"=paste(contrafacta_and_analogies_with_dates$model_id,"<-->",contrafacta_and_analogies_with_dates$metrical_affinities_id))
analogies<-na.omit(analogies)
analogies<-distinct(analogies)
analogies$dashes<-TRUE
analogies$arrows="to"
#dataframe of links
links_vis<-rbind(
contrafacta,
analogies
)
links_vis$smooth<-TRUE
#dataframe of nodes
songs<-union(links_vis$from,links_vis$to)
nodes_vis<-data.frame("id"=songs,"label"=songs)
Finally, create an interactive visualisation of the network. Songs can be selected by id or by clicking on them. When a song is selected, its neighbours (contrafacta or songs with metrical analogies) are highlighted.
#interactive visuals
visNetwork(nodes_vis,links_vis)%>%
visIgraphLayout(layout = "layout_with_fr") %>%
visOptions(
selectedBy = list(
"variable"="id",
"highlight"=TRUE
),
highlightNearest=list(
"enabled"=TRUE,
"algorithm"="hierarchical",
"degree"=list(from=0,to=1),
"labelOnly"=FALSE
)
) %>%
visLayout(randomSeed = 1234)
Each node in this temporal network represent the corpus composed by an author. Thus, once an author’s node comes into existance, it continues to exist ever since. In theory, an author’s node begin to exist when he starts to compose, that is, the beginning of his activity period. Yet, temporal data about the composition of songs is often uncertain in the BdT. Occasionally, the earliest proposed composition date of a contrafactum in the BdT has been found to preceed the beginning of the activity period of the author of the model. To deal with this uncertainty and ensure that the data on the author’s activity period and the data on the composition of a contrafactum/imitation are compatible, the onset of an author’s node is fixed at the beginning of the author’s period of activity or as the earliest proposed date of composition of a contrafactum/imitation of his work, whichever is earlier.
#extract relevant data
authors_names<-na.omit(unique(c(as.vector(contrafacta_and_analogies_with_dates$model_author),as.vector(contrafacta_and_analogies_with_dates$contrafactum_author),as.vector(contrafacta_and_analogies_with_dates$metrical_affinities_author))))
authors_count<-length(authors_names)
authors_onsets<-numeric(authors_count)
for (j in 1:authors_count){
authors_onsets[j]<-
min(
na.omit(c(
contrafacta_and_analogies_with_dates$model_onset[contrafacta_and_analogies_with_dates$model_author==authors_names[j]],
contrafacta_and_analogies_with_dates$contrafactum_onset[contrafacta_and_analogies_with_dates$contrafactum_author==authors_names[j]],
contrafacta_and_analogies_with_dates$metrical_affinities_onset[contrafacta_and_analogies_with_dates$metrical_affinities_author==authors_names[j]]
))
)
}
authors_terminus<-max(na.omit(c(
contrafacta_and_analogies_with_dates$model_terminus,
contrafacta_and_analogies_with_dates$contrafactum_terminus,
contrafacta_and_analogies_with_dates$metrical_affinities_terminus
)))+1
#define author nodes
author_nodes<-data.frame("onset"=authors_onsets,
"terminus"=authors_terminus,
"vertex.id"=1:authors_count,
"onset.censored"=FALSE,
"terminus.censored"=FALSE,
"duration"=authors_terminus-authors_onsets,
"name"=authors_names)
The presence of a link from node “A” to node “B” means that author “B” has composed a song that is a contrafactum or bears metrical analogies with a song composed by “A”. Theoretically, the link should appear exactly when the contrafactum/imitation is composed. Yet, uncertainty in the data means that the composition time is usually given as a range [t1,t2]. The composition time t of the contrafactum has then to be chosen within this interval. The code includes the option to set t=t1, t=(t1+t2)/2 and t=t2. The default is fixed as t=t1.
Occasionally, the earliest proposed composition time t1 of a contrafactum in the BdT has been found to preceed the earliest proposed composition time t1’ of its model. This can mean To ensure compatibility, the time of the link is fixed as the latest between these two dates: max(t1,t1’). Note that whilst the choice of the earliest extreme of the interval is somewhat arbitrary, to ensure compatibility, it is important to always take max(t,t’) as the time of the link, regardless of how t has been chosen in the interval. See Robustness section for more details.
First, we define the links representing the composition of contrafacta only
#links representing the composition of contrafacta only
#link time options
#beginning of the interval
contrafacta_link_time_beginning<-apply(data.frame(
model_onset=contrafacta_and_analogies_with_dates$model_onset,
contrafactum_onset=contrafacta_and_analogies_with_dates$contrafactum_onset
), 1, max)
#average
contrafacta_link_time_average<-apply(data.frame(
model_onset=(contrafacta_and_analogies_with_dates$model_onset+contrafacta_and_analogies_with_dates$model_terminus)/2,
contrafactum_onset=(contrafacta_and_analogies_with_dates$contrafactum_onset+contrafacta_and_analogies_with_dates$contrafactum_terminus)/2
), 1, max)
#end of the interval
contrafacta_link_time_end<-apply(data.frame(
model_onset=contrafacta_and_analogies_with_dates$model_terminus,
contrafactum_onset=contrafacta_and_analogies_with_dates$contrafactum_terminus
), 1, max)
#default is fixed as beginning of the interval. UPDATE THIS IF REQUIRED
contrafacta_link_time<-contrafacta_link_time_beginning
#links dataframe
contrafacta_links<-data.frame(
"onset"=contrafacta_link_time,
"terminus"=contrafacta_link_time,
"tail"=author_nodes$vertex.id[match(contrafacta_and_analogies_with_dates$model_author,author_nodes$name)],
"head"=author_nodes$vertex.id[match(contrafacta_and_analogies_with_dates$contrafactum_author,author_nodes$name)],
"onset.censored"=FALSE,
"terminus.censored"=FALSE,
"duration"=authors_terminus-contrafacta_link_time,
"edge.id"=0,#temporary only
"tail_label"=contrafacta_and_analogies_with_dates$model_id,
"tail_onset"=contrafacta_and_analogies_with_dates$model_onset,
"tail_terminus"=contrafacta_and_analogies_with_dates$model_terminus,
"head_label"=contrafacta_and_analogies_with_dates$contrafactum_id,
"head_onset"=contrafacta_and_analogies_with_dates$contrafactum_onset,
"head_terminus"=contrafacta_and_analogies_with_dates$contrafactum_terminus,
"repsec"=TRUE
)
#dataframe cleaning and sorting
contrafacta_links<-na.omit(contrafacta_links)
contrafacta_links<-contrafacta_links[order(contrafacta_links$head,contrafacta_links$tail),]
#define link id based on link tail and head
contrafacta_links_tail_head<-as.character(unique(paste(contrafacta_links$head,contrafacta_links$tail)))
for (i in 1:length(contrafacta_links_tail_head)){
contrafacta_links$edge.id[
paste(
contrafacta_links$head,
contrafacta_links$tail)
==contrafacta_links_tail_head[i]
]<-i
}
#At the time of writing, tsna cannot deal with multigraphs, so one needs to ensure that at any given time,
#any two nodes are connected by at most one link.
contrafacta_links<-contrafacta_links[!duplicated(contrafacta_links[c("edge.id","onset")]),]
Then, we define the links representing the composition fo a song with metrical analogies
#links representing the composition of a song with metrical analogies
#link time options
#beginning of the interval
analogies_link_time_beginning<-apply(data.frame(
model_onset=contrafacta_and_analogies_with_dates$model_onset,
analogy_onset=contrafacta_and_analogies_with_dates$metrical_affinities_onset
), 1, max)
#average
analogies_link_time_average<-apply(data.frame(
model_onset=(contrafacta_and_analogies_with_dates$model_onset+contrafacta_and_analogies_with_dates$model_terminus)/2,
contrafactum_onset=(contrafacta_and_analogies_with_dates$metrical_affinities_onset+contrafacta_and_analogies_with_dates$metrical_affinities_terminus)/2
), 1, max)
#end of the interval
analogies_link_time_end<-apply(data.frame(
model_onset=contrafacta_and_analogies_with_dates$model_terminus,
contrafactum_onset=contrafacta_and_analogies_with_dates$metrical_affinities_terminus
), 1, max)
#default is fixed as beginning of the interval. UPDATE THIS IF REQUIRED
analogies_link_time<-analogies_link_time_beginning
#links dataframe
analogies_links<-rbind(
data.frame(
"onset"=analogies_link_time,
"terminus"=analogies_link_time,
"tail"=author_nodes$vertex.id[match(contrafacta_and_analogies_with_dates$model_author,author_nodes$name)],
"head"=author_nodes$vertex.id[match(contrafacta_and_analogies_with_dates$metrical_affinities_author,author_nodes$name)],
"onset.censored"=FALSE,
"terminus.censored"=FALSE,
"duration"=authors_terminus-analogies_link_time,
"edge.id"=0,
"tail_label"=contrafacta_and_analogies_with_dates$model_id,
"tail_onset"=contrafacta_and_analogies_with_dates$model_onset,
"tail_terminus"=contrafacta_and_analogies_with_dates$model_terminus,
"head_label"=contrafacta_and_analogies_with_dates$metrical_affinities_id,
"head_onset"=contrafacta_and_analogies_with_dates$metrical_affinities_onset,
"head_terminus"=contrafacta_and_analogies_with_dates$metrical_affinities_terminus,
"repsec"=FALSE
),
data.frame("onset"=analogies_link_time,
"terminus"=analogies_link_time,
"tail"=author_nodes$vertex.id[match(contrafacta_and_analogies_with_dates$metrical_affinities_author,author_nodes$name)],
"head"=author_nodes$vertex.id[match(contrafacta_and_analogies_with_dates$model_author,author_nodes$name)],
"onset.censored"=FALSE,
"terminus.censored"=FALSE,
"duration"=analogies_link_time,
"edge.id"=0,
"tail_label"=contrafacta_and_analogies_with_dates$metrical_affinities_id,
"tail_onset"=contrafacta_and_analogies_with_dates$metrical_affinities_onset,
"tail_terminus"=contrafacta_and_analogies_with_dates$metrical_affinities_terminus,
"head_label"=contrafacta_and_analogies_with_dates$model_id,
"head_onset"=contrafacta_and_analogies_with_dates$model_onset,
"head_terminus"=contrafacta_and_analogies_with_dates$model_terminus,
"repsec"=FALSE
)
)
#dataframe cleaning and sorting
all_links<-rbind(na.omit(contrafacta_links),na.omit(analogies_links))
all_links<-all_links[order(all_links$head,all_links$tail),]
#define edge id
all_links_tail_head<-as.character(unique(paste(all_links$head,all_links$tail)))
for (i in 1:length(all_links_tail_head)){
all_links$edge.id[
paste(
all_links$head,
all_links$tail)
==all_links_tail_head[i]
]<-i
}
#At the time of writing, tsna cannot deal with multigraphs, so one needs to ensure that at any given time,
#any two nodes are connected by at most one link.
all_links<-all_links[!duplicated(all_links[c("edge.id","onset")]),]
Before we construct the temporal network, we need static networks: one containing the links due to contracta only and one containing contrafacta and as well as more general metrical analogies.
#contrafacta only
contrafacta_static<-network(
data.frame("tail"=contrafacta_links$tail,"head"=contrafacta_links$head),
directed = TRUE,
multiple = FALSE,
bipartite = FALSE
)
#all links
all_static<-network(
data.frame("tail"=all_links$tail,"head"=all_links$head),
directed = TRUE,
multiple = FALSE,
bipartite = FALSE
)
We can now construct the temporal networks: one containing the links due to contracta only and one containing contrafacta and as well as more general metrical analogies.
Contrafacta only:
#make temporal network
contrafacta_dynamic <- networkDynamic(
contrafacta_static,
edge.spells = data.frame("onset"=contrafacta_links$onset,
"terminus"=contrafacta_links$terminus,
"tail verted.id"=contrafacta_links$tail,
"head vertex.id"=contrafacta_links$head
),
vertex.spells = data.frame("onset"=author_nodes$onset,
"terminus"=author_nodes$terminus,
"vertex.id"=author_nodes$vertex.id
)
)
## Edge activity in base.net was ignored
## Created net.obs.period to describe network
## Network observation period info:
## Number of observation spells: 1
## Maximal time range observed: 1090 until 1351
## Temporal mode: continuous
## Time unit: unknown
## Suggested time increment: NA
#check correctness
network.dynamic.check(contrafacta_dynamic)
## $vertex.checks
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [46] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [61] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [76] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [91] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [106] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [121] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [136] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [151] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [166] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [181] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [196] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [211] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [226] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [241] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [256] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [271] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [286] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [301] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##
## $edge.checks
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [46] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [61] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [76] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [91] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [106] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [121] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [136] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [151] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [166] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [181] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [196] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [211] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [226] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [241] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [256] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [271] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [286] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [301] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [316] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [331] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [346] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [361] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [376] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [391] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [406] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [421] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [436] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [451] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [466] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [481] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [496] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [511] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [526] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [541] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [556] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [571] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##
## $dyad.checks
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [46] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [61] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [76] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [91] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [106] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [121] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [136] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [151] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [166] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [181] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [196] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [211] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [226] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [241] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [256] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [271] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [286] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [301] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [316] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [331] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [346] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [361] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [376] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [391] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [406] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [421] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [436] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [451] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [466] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [481] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [496] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [511] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [526] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [541] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [556] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [571] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##
## $vertex.tea.checks
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [46] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [61] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [76] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [91] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [106] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [121] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [136] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [151] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [166] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [181] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [196] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [211] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [226] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [241] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [256] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [271] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [286] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [301] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##
## $edge.tea.checks
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [46] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [61] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [76] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [91] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [106] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [121] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [136] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [151] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [166] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [181] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [196] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [211] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [226] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [241] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [256] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [271] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [286] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [301] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [316] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [331] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [346] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [361] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [376] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [391] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [406] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [421] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [436] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [451] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [466] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [481] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [496] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [511] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [526] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [541] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [556] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [571] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##
## $network.tea.checks
## [1] TRUE
##
## $net.obs.period.check
## [1] TRUE
Contrafacta and analogies:
#make temporal network
all_dynamic <- networkDynamic(
all_static,
edge.spells = data.frame("onset"=all_links$onset,
"terminus"=all_links$terminus,
"tail verted.id"=all_links$tail,
"head vertex.id"=all_links$head
),
vertex.spells = data.frame("onset"=author_nodes$onset,
"terminus"=author_nodes$terminus,
"vertex.id"=author_nodes$vertex.id
)
)
## Edge activity in base.net was ignored
## Created net.obs.period to describe network
## Network observation period info:
## Number of observation spells: 1
## Maximal time range observed: 1090 until 1351
## Temporal mode: continuous
## Time unit: unknown
## Suggested time increment: NA
#check
network.dynamic.check(all_dynamic)
## $vertex.checks
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [46] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [61] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [76] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [91] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [106] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [121] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [136] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [151] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [166] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [181] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [196] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [211] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [226] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [241] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [256] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [271] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [286] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [301] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##
## $edge.checks
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [15] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [29] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [43] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [57] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [71] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [85] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [99] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [113] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [127] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [141] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [155] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [169] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [183] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [197] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [211] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [225] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [239] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [253] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [267] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [281] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [295] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [309] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [323] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [337] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [351] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [365] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [379] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [393] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [407] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [421] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [435] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [449] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [463] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [477] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [491] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [505] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [519] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [533] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [547] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [561] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [575] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [589] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [603] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [617] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [631] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [645] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [659] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [673] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [687] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [701] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [715] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [729] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [743] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [757] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [771] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [785] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [799] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [813] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [827] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [841] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [855] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [869] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [883] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [897] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [911] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [925] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [939] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [953] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [967] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [981] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [995] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [1009] TRUE TRUE TRUE
##
## $dyad.checks
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [15] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [29] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [43] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [57] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [71] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [85] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [99] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [113] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [127] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [141] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [155] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [169] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [183] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [197] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [211] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [225] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [239] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [253] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [267] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [281] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [295] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [309] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [323] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [337] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [351] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [365] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [379] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [393] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [407] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [421] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [435] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [449] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [463] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [477] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [491] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [505] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [519] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [533] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [547] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [561] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [575] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [589] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [603] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [617] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [631] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [645] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [659] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [673] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [687] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [701] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [715] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [729] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [743] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [757] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [771] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [785] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [799] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [813] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [827] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [841] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [855] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [869] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [883] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [897] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [911] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [925] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [939] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [953] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [967] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [981] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [995] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [1009] TRUE TRUE TRUE
##
## $vertex.tea.checks
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [46] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [61] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [76] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [91] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [106] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [121] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [136] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [151] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [166] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [181] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [196] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [211] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [226] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [241] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [256] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [271] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [286] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [301] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##
## $edge.tea.checks
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [15] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [29] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [43] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [57] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [71] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [85] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [99] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [113] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [127] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [141] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [155] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [169] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [183] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [197] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [211] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [225] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [239] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [253] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [267] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [281] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [295] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [309] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [323] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [337] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [351] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [365] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [379] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [393] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [407] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [421] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [435] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [449] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [463] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [477] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [491] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [505] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [519] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [533] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [547] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [561] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [575] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [589] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [603] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [617] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [631] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [645] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [659] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [673] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [687] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [701] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [715] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [729] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [743] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [757] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [771] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [785] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [799] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [813] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [827] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [841] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [855] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [869] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [883] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [897] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [911] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [925] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [939] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [953] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [967] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [981] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [995] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [1009] TRUE TRUE TRUE
##
## $network.tea.checks
## [1] TRUE
##
## $net.obs.period.check
## [1] TRUE
Example of application: comptute forward and backward reachability
#contrafacta only
fwd_reach_contrafacta_only <- tReach(contrafacta_dynamic)
bkwd_reach_contrafacta_only <- tReach(contrafacta_dynamic, direction = "bkwd")
#save as dataframe
contrafacta_fwd_bkwd<-data.frame("fwd"=fwd_reach_contrafacta_only,"bkwd"=bkwd_reach_contrafacta_only,"author_name"=authors_names)
#all links
fwd_reach_all_contrafacta <- tReach(all_dynamic)
bkwd_reach_all_contrafacta <- tReach(all_dynamic, direction = "bkwd")
#save as dataframe
all_fwd_bkwd<-data.frame("fwd"=fwd_reach_all_contrafacta,"bkwd"=bkwd_reach_all_contrafacta,"author_name"=authors_names)
We can finally compute node-related measures for our temporal networks and create visualisations to assist their analysis.
First, we create animated plots that show when links are created.
Contrafacta only:
#calculate how to plot animated version
compute.animation(
contrafacta_dynamic,
animation.mode = "kamadakawai",
slice.par = list(
start = 1130,
end = 1332,
interval = 10,
aggregate.dur = 20,
rule = "latest"
)
)
## Calculating layout for network slice from time 1130 to 1150
## Calculating layout for network slice from time 1140 to 1160
## Calculating layout for network slice from time 1150 to 1170
## Calculating layout for network slice from time 1160 to 1180
## Calculating layout for network slice from time 1170 to 1190
## Calculating layout for network slice from time 1180 to 1200
## Calculating layout for network slice from time 1190 to 1210
## Calculating layout for network slice from time 1200 to 1220
## Calculating layout for network slice from time 1210 to 1230
## Calculating layout for network slice from time 1220 to 1240
## Calculating layout for network slice from time 1230 to 1250
## Calculating layout for network slice from time 1240 to 1260
## Calculating layout for network slice from time 1250 to 1270
## Calculating layout for network slice from time 1260 to 1280
## Calculating layout for network slice from time 1270 to 1290
## Calculating layout for network slice from time 1280 to 1300
## Calculating layout for network slice from time 1290 to 1310
## Calculating layout for network slice from time 1300 to 1320
## Calculating layout for network slice from time 1310 to 1330
## Calculating layout for network slice from time 1320 to 1340
## Calculating layout for network slice from time 1330 to 1350
#Render the animation and open it in a web brower
render.d3movie(
contrafacta_dynamic,
displaylabels = FALSE,
output.mode = 'htmlWidget'
)
## caching 10 properties for slice 0
## caching 10 properties for slice 1
## caching 10 properties for slice 2
## caching 10 properties for slice 3
## caching 10 properties for slice 4
## caching 10 properties for slice 5
## caching 10 properties for slice 6
## caching 10 properties for slice 7
## caching 10 properties for slice 8
## caching 10 properties for slice 9
## caching 10 properties for slice 10
## caching 10 properties for slice 11
## caching 10 properties for slice 12
## caching 10 properties for slice 13
## caching 10 properties for slice 14
## caching 10 properties for slice 15
## caching 10 properties for slice 16
## caching 10 properties for slice 17
## caching 10 properties for slice 18
## caching 10 properties for slice 19
## caching 10 properties for slice 20
## loading ndtv-d3 animation widget...
Contrafacta and analogies:
#calculate how to plot animated version
compute.animation(
all_dynamic,
animation.mode = "kamadakawai",
slice.par = list(
start = 1190,
end = 1332,
interval = 5,
aggregate.dur = 5,
rule = "latest"
)
)
## Calculating layout for network slice from time 1190 to 1195
## Calculating layout for network slice from time 1195 to 1200
## Calculating layout for network slice from time 1200 to 1205
## Calculating layout for network slice from time 1205 to 1210
## Calculating layout for network slice from time 1210 to 1215
## Calculating layout for network slice from time 1215 to 1220
## Calculating layout for network slice from time 1220 to 1225
## Calculating layout for network slice from time 1225 to 1230
## Calculating layout for network slice from time 1230 to 1235
## Calculating layout for network slice from time 1235 to 1240
## Calculating layout for network slice from time 1240 to 1245
## Calculating layout for network slice from time 1245 to 1250
## Calculating layout for network slice from time 1250 to 1255
## Calculating layout for network slice from time 1255 to 1260
## Calculating layout for network slice from time 1260 to 1265
## Calculating layout for network slice from time 1265 to 1270
## Calculating layout for network slice from time 1270 to 1275
## Calculating layout for network slice from time 1275 to 1280
## Calculating layout for network slice from time 1280 to 1285
## Calculating layout for network slice from time 1285 to 1290
## Calculating layout for network slice from time 1290 to 1295
## Calculating layout for network slice from time 1295 to 1300
## Calculating layout for network slice from time 1300 to 1305
## Calculating layout for network slice from time 1305 to 1310
## Calculating layout for network slice from time 1310 to 1315
## Calculating layout for network slice from time 1315 to 1320
## Calculating layout for network slice from time 1320 to 1325
## Calculating layout for network slice from time 1325 to 1330
## Calculating layout for network slice from time 1330 to 1335
#Render the animation and open it in a web brower
render.d3movie(
all_dynamic,
displaylabels = FALSE,
output.mode = 'htmlWidget',#,
#This slice function makes the labels work
vertex.tooltip = function(slice) {
paste(
"<b>ID:</b>", (slice %v% "name"))
}
)
## caching 10 properties for slice 0
## caching 10 properties for slice 1
## caching 10 properties for slice 2
## caching 10 properties for slice 3
## caching 10 properties for slice 4
## caching 10 properties for slice 5
## caching 10 properties for slice 6
## caching 10 properties for slice 7
## caching 10 properties for slice 8
## caching 10 properties for slice 9
## caching 10 properties for slice 10
## caching 10 properties for slice 11
## caching 10 properties for slice 12
## caching 10 properties for slice 13
## caching 10 properties for slice 14
## caching 10 properties for slice 15
## caching 10 properties for slice 16
## caching 10 properties for slice 17
## caching 10 properties for slice 18
## caching 10 properties for slice 19
## caching 10 properties for slice 20
## caching 10 properties for slice 21
## caching 10 properties for slice 22
## caching 10 properties for slice 23
## caching 10 properties for slice 24
## caching 10 properties for slice 25
## caching 10 properties for slice 26
## caching 10 properties for slice 27
## caching 10 properties for slice 28
## loading ndtv-d3 animation widget...
The following code generates plot comparing the forward and backward reachability of each author. Authors with exceptionally large forward or backward reachability are labelled for convenience.
Contrafacta only:
ggplot(contrafacta_fwd_bkwd, aes(x=fwd,y=bkwd))+
geom_point(color="black", position = "jitter")+#, size=sqrt(data$count)*2)+
geom_label_repel(
data=contrafacta_fwd_bkwd %>% filter(fwd>60 | bkwd>27 | (fwd>27 & bkwd>10)),
aes(label=author_name),
#nudge_x = 1, nudge_y = 0.5,
check_overlap = T
)+
theme_ipsum(
axis_title_size = 12,
axis_text_size = 11,
plot_margin = margin(0, 0, 0, 0),
grid_col = "#cccccc",
grid = TRUE,
axis_col = "#000000",
axis = TRUE,
ticks = FALSE
)+
theme(
plot.title = element_text(size=15),
axis.title = element_text(size=10,vjust=0.5),
panel.grid.major.x=element_blank(),
panel.grid.minor.x=element_blank()
) +
ggtitle("Backward- vs Forward-Reachable Sets (Contrafacta)")+
ylab("size of backward-reachable set")+
xlab("size of forward-reachable set")+
scale_x_continuous(breaks=seq(0,130,by=10))
## Warning: Ignoring unknown parameters: check_overlap
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
Contrafacta and analogies:
ggplot(all_fwd_bkwd, aes(x=fwd,y=bkwd))+
geom_point(color="black", position = "jitter")+
geom_label_repel(
data=all_fwd_bkwd %>% filter(fwd>265 | bkwd>90 | (fwd>250 & bkwd>70)),
aes(label=author_name),
#nudge_x = 1, nudge_y = 0.5,
check_overlap = T
)+
theme_ipsum(
axis_title_size = 12,
axis_text_size = 11,
plot_margin = margin(0, 0, 0, 0),
grid_col = "#cccccc",
grid = TRUE,
axis_col = "#000000",
axis = TRUE,
ticks = FALSE
)+
theme(
plot.title = element_text(size=15),
axis.title = element_text(size=10,vjust=0.5),
panel.grid.major.x=element_blank(),
panel.grid.minor.x=element_blank()
) +
ggtitle("Backward- vs Forward-Reachable Sets (Contrafacta and Analogies)")+
ylab("size of backward-reachable set")+
xlab("size of forward-reachable set")+
scale_x_continuous(breaks=seq(0,270,by=15))
## Warning: Ignoring unknown parameters: check_overlap
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning: ggrepel: 6 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
The following function can be used for both analysis and visualisation. It uses igraph for the graph analysis and visNetwork for its visualisation The function takes 4 arguments:
analogies: TRUE/FALSE whether to include analogies links in the network or not (just contrafacta).
type_size: the measure to be represented as node size. For possible measures, see below.
type_colour: the measure to be represented as node colour For measures, see below.
visual: TRUE/FALSE whether the result should be a plot or a dataframe with the required measures. The FALSE option is helpful for saving data for future analysis.
Possible choices of measures:
“in degree”
“out degree”
“betweenness static”, i.e. the betweenness computed ignoring temporal information
“betweenness dynamic”, i.e. the betweenness computed including temporal information
“closeness static”
“closeness dynamic”
“reachable”, i.e. the size of the forward reachability set ignoring tempporal information
“temporal reachable” i.e. the size of the forward reachability set including tempporal information
Remark: The computation of the betweenness dynamic is quite slow. It might take a few minutes.
First, define helpful links dataframes (this alternative format is required when using igraph)
#contrafacta only
contrafacta_links_2<-data.frame(
"from"=contrafacta_links$tail,
"to"=contrafacta_links$head,
"head_label"=contrafacta_links$head_label,
"head_onset"=contrafacta_links$head_onset,
"head_terminus"=contrafacta_links$head_terminus,
"tail_label"= contrafacta_links$tail_label,
"tail_onset"=contrafacta_links$tail_onset,
"tail_terminus"=contrafacta_links$tail_terminus,
"dashes"=!contrafacta_links$repsec)
#clean dataframe and add labels
contrafacta_links_2<-na.omit(contrafacta_links_2)
contrafacta_links_2<-distinct(contrafacta_links_2,from,to,head_label,tail_label,.keep_all = TRUE)
contrafacta_links_2$title<-paste(contrafacta_links_2$tail_label,
" (",
contrafacta_links_2$tail_onset,
"-",
contrafacta_links_2$tail_terminus,
")->",
contrafacta_links_2$head_label,
" (",
contrafacta_links_2$head_onset,
"-",
contrafacta_links_2$head_terminus,
")",sep="")
contrafacta_links_2$arrows<-"to"
#contrafacta and metrical analogies
all_links_2<-data.frame(
"from"=all_links$tail,
"to"=all_links$head,
"head_label"=all_links$head_label,
"head_onset"=all_links$head_onset,
"head_terminus"=all_links$head_terminus,
"tail_label"= all_links$tail_label,
"tail_onset"=all_links$tail_onset,
"tail_terminus"=all_links$tail_terminus,
"dashes"=!all_links$repsec)
all_links_2<-na.omit(all_links_2)
all_links_2<-distinct(all_links_2,from,to,head_label,tail_label,.keep_all = TRUE)
all_links_2$title<-paste(all_links_2$tail_label,
" (",
all_links_2$tail_onset,
"-",
all_links_2$tail_terminus,
") ->",
all_links_2$head_label,
" (",
all_links_2$head_onset,
"-",
all_links_2$head_terminus,
")",sep="")
all_links_2$arrows="to"
Finally, the function
final_network_with_colour<-function(analogies,type_size,type_colour,visual){
#define nodes
{
nodes_vis<-data.frame(id=author_nodes$vertex.id,label=author_nodes$name)
}
#define edges
{
if(analogies){
edges_vis<-all_links_2
static_network<-all_static
dynamic_network<-all_dynamic
}else{
edges_vis<-contrafacta_links_2
static_network<-contrafacta_static
dynamic_network<-contrafacta_dynamic
}
edges_vis$smooth<-FALSE
}
#define igraph object
{
static_network_igraph<-graph_from_data_frame(edges_vis, directed = TRUE, vertices=nodes_vis)
}
#compute node measures
{
if (type_size=="in degree"|| type_colour=="in degree"){
nodes_vis$in_degree<-igraph::degree(static_network_igraph,mode="in")
}
if (type_size=="out degree" || type_colour=="out degree") {
nodes_vis$out_degree<-igraph::degree(static_network_igraph,mode="out")
}
if (type_size=="betweenness static" || type_colour=="betweenness static"){
nodes_vis$betweenness_static<-betweenness(static_network)/max(betweenness(static_network))*50
}
if (type_size=="betweenness dynamic" || type_colour=="betweenness dynamic"){
#temporal betweenness function
{
#inputs: a starting node i and a final node j
#outputs: number of temporally valid paths from i to j and the number of such paths passing through author/node k for each author
n_paths_from_i_to_j<-function(i,j){
#find all paths in from i to j
all_paths<-all_shortest_paths(static_network_igraph,from=i,to=j)$res
valid_paths<-list()
valid_paths_with_k<-numeric(authors_count)
n=1
#for each path, verify that the path is temporally valid
#i.e., if the time of appearance of the directed links along the path is sorted
for (p in all_paths) {
p_data_frame<-data.frame(
from=as.numeric(p[1:(length(p)-1)]),
to=as.numeric(p[2:(length(p))])
)
p_data_frame<-join(p_data_frame,edges_vis,by=c("from","to"))
p_valid<-!is.unsorted(p_data_frame$onset)
#for each valid path, check if it passes through author/node k
if(p_valid){
valid_paths[[n]]<-p
n<-n+1
for (k in 1:authors_count){
valid_paths_with_k[k]<-ifelse(k %in% p, valid_paths_with_k[k]+1,valid_paths_with_k[k])
}
}
}
valid_and_k_valid<-list("valid"=length(valid_paths),"k_valid"=valid_paths_with_k)
return(valid_and_k_valid)
}
}
#computation
{
#initialise matrices
n_paths_ijk<-array(NA,dim=c(authors_count,authors_count,authors_count))
n_paths_ij<-matrix(NA,nrow=authors_count,ncol=authors_count)
#find number of valid paths for each apir (i,j) and for all values of k
for (i in 1:authors_count) {
for (j in 1:authors_count) {
if (!i==j){
paths_info_ij<-n_paths_from_i_to_j(i,j)
n_paths_ij[i,j]<-paths_info_ij$valid
n_paths_ijk[i,j,]<-paths_info_ij$k_valid
}
}
print(i)
}
#compute betweenness for each value k
temporal_betwenness_values<-numeric(authors_count)
diag(n_paths_ij)<-1
for (k in 1:authors_count){
n_paths_ij_k<-n_paths_ij
n_paths_ijk_k<-n_paths_ijk[,,k]
diag(n_paths_ijk_k)<-0
n_paths_ijk_k<-n_paths_ijk_k[-k,-k]
n_paths_ij_k<-n_paths_ij_k[-k,-k]
ratio_matrix<-n_paths_ijk_k/n_paths_ij_k
temporal_betwenness_values[k]<-sum(ratio_matrix,na.rm=TRUE)
}
}
#assign betweenness to each node
nodes_vis$betweenness_dynamic<-temporal_betwenness_values
}
if (type_size=="closeness static" || type_colour=="closeness static"){
out_harmon_static<-numeric(authors_count)
static_network_distances<-distances(static_network_igraph, v = V(static_network_igraph), to = V(static_network_igraph), mode = "out", weights = NULL, algorithm = "dijkstra")
for(i in 1:authors_count){
out_harmon_static[i]<-sum(1/static_network_distances[i,-i])
}
nodes_vis$out_harmonic_closeness_static<-out_harmon_static
}
if (type_size=="closeness dynamic" || type_colour=="closeness dynamic"){
out_harmon_dynamic<-numeric(312)
dynamic_network_distances<-matrix(NA,nrow=312,ncol=312)
for (i in 1:312){
dynamic_network_distances[i,]<-tPath(dynamic_network, v = i,direction ="fwd")$gsteps
}
for(i in 1:312){
out_harmon_dynamic[i]<-sum(1/dynamic_network_distances[i,-i])
}
nodes_vis$out_harmonic_closeness_dynamic<-out_harmon_dynamic
}
if (type_size=="reachable" || type_colour=="reachable"){
nodes_vis$reachable_set_size<-rowSums(reachability(static_network))
}
if (type_size=="temporal reachable" || type_colour=="temporal reachable"){
nodes_vis$temporal_reachable_set_size<-tReach(dynamic_network)
}
}
#visuals
{
set.seed(1234)
colfunc<-colorRampPalette(c("#333333",ifelse(analogies,"orange","red"),"white"))
highlightnearestvalues<-list(
"enabled"=TRUE,
"algorithm"="hierarchical",
"degree"=list(from=0,to=0),
"labelOnly"=FALSE
)
if (type_colour=="none"){
nodes_vis$color<-"black"
}
else if (type_colour=="in degree"){
color_distance<-colfunc(max(nodes_vis$in_degree)+1)
nodes_vis$color<-color_distance[floor(nodes_vis$in_degree)+1]
highlightnearestvalues<-list(
"enabled"=TRUE,
"algorithm"="hierarchical",
"degree"=list(from=1,to=0),
"labelOnly"=FALSE
)
}
else if (type_colour=="out degree"){
color_distance<-colfunc(max(nodes_vis$out_degree)+1)
nodes_vis$color<-color_distance[floor(nodes_vis$out_degree)+1]
highlightnearestvalues<-list(
"enabled"=TRUE,
"algorithm"="hierarchical",
"degree"=list(from=0,to=1),
"labelOnly"=FALSE
)
}
else if (type_colour=="betweenness static"){
color_distance<-colfunc(max(nodes_vis$betweenness_static)+1)
nodes_vis$color<-color_distance[floor(nodes_vis$betweenness_static)+1]
}
else if (type_colour=="betweenness dynamic"){
color_distance<-colfunc(max(nodes_vis$betweenness_dynamic)+1)
nodes_vis$color<-color_distance[floor(nodes_vis$betweenness_dynamic)+1]
}
else if (type_colour=="closeness static"){
color_distance<-colfunc(max(nodes_vis$out_harmonic_closeness_static)+1)
nodes_vis$color<-color_distance[floor(nodes_vis$out_harmonic_closeness_static)+1]
}
else if (type_colour=="closeness dynamic"){
color_distance<-colfunc(max(nodes_vis$out_harmonic_closeness_dynamic)+1)
nodes_vis$color<-color_distance[floor(nodes_vis$out_harmonic_closeness_dynamic)+1]
}
else if (type_colour=="reachable"){
color_distance<-colfunc(max(nodes_vis$reachable_set_size)+1)
nodes_vis$color<-color_distance[floor(nodes_vis$reachable_set_size)+1]
highlightnearestvalues<-list(
"enabled"=TRUE,
"algorithm"="hierarchical",
"degree"=list(from=0,to=12),
"labelOnly"=FALSE
)
}
else if (type_colour=="temporal reachable"){
color_distance<-colfunc(max(nodes_vis$temporal_reachable_set_size)+1)
nodes_vis$color<-color_distance[floor(nodes_vis$temporal_reachable_set_size)+1]
}
if (type_size=="none"){
nodes_vis$value<-1
}
else if (type_size=="in degree"){
nodes_vis$value<-nodes_vis$in_degree+1
highlightnearestvalues<-list(
"enabled"=TRUE,
"algorithm"="hierarchical",
"degree"=list(from=1,to=0),
"labelOnly"=FALSE
)
}
else if (type_size=="out degree"){
nodes_vis$value<-nodes_vis$out_degree+1
highlightnearestvalues<-list(
"enabled"=TRUE,
"algorithm"="hierarchical",
"degree"=list(from=0,to=1),
"labelOnly"=FALSE
)
}
else if (type_size=="betweenness static"){
nodes_vis$value<-floor(nodes_vis$betweenness_static)+1
}
else if (type_size=="betweenness dynamic"){
nodes_vis$value<-floor(nodes_vis$betweenness_dynamic)+1
}
else if (type_size=="closeness static"){
nodes_vis$value<-floor(nodes_vis$out_harmonic_closeness_static)+1
}
else if (type_size=="closeness dynamic"){
nodes_vis$value<-floor(nodes_vis$out_harmonic_closeness_dynamic)+1
}
else if (type_size=="reachable"){
nodes_vis$value<-floor(nodes_vis$reachable_set_size)+1
highlightnearestvalues<-list(
"enabled"=TRUE,
"algorithm"="hierarchical",
"degree"=list(from=0,to=12),
"labelOnly"=FALSE
)
}
else if (type_size=="temporal reachable"){
nodes_vis$value<-floor(nodes_vis$temporal_reachable_set_size)+1
}
p<-visNetwork(nodes_vis,edges_vis)%>%
visIgraphLayout(layout = "layout_with_fr") %>%
visOptions(
selectedBy = list(
"variable"="label",
"highlight"=TRUE
),
highlightNearest=highlightnearestvalues
) %>%
visLayout(randomSeed = 1234)
if(visual){
return(p)
}
else {
return(nodes_vis)
}
}
}
Here are a few example of the visuals:
final_network_with_colour(TRUE,"out degree","in degree",TRUE)
2) All links, size of the node is its out-degree, colour is its temporal reachability
final_network_with_colour(TRUE,"out degree","temporal reachable",TRUE)
3) All links, size of the node is its reachability, ignoring temporal information, colour is its temporal reachability
final_network_with_colour(TRUE,"reachable","temporal reachable",TRUE)
4) Contrafacta only, size of the node is its out-degree, colour is its in-degree
final_network_with_colour(FALSE,"out degree","in degree",TRUE)
5) All links, size of the node is its betweenness, colour is its closeness, both computed taking temporal information info account
final_network_with_colour(TRUE,"betweenness dynamic","closeness dynamic",TRUE)
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
## [1] 11
## [1] 12
## [1] 13
## [1] 14
## [1] 15
## [1] 16
## [1] 17
## [1] 18
## [1] 19
## [1] 20
## [1] 21
## [1] 22
## [1] 23
## [1] 24
## [1] 25
## [1] 26
## [1] 27
## [1] 28
## [1] 29
## [1] 30
## [1] 31
## [1] 32
## [1] 33
## [1] 34
## [1] 35
## [1] 36
## [1] 37
## [1] 38
## [1] 39
## [1] 40
## [1] 41
## [1] 42
## [1] 43
## [1] 44
## [1] 45
## [1] 46
## [1] 47
## [1] 48
## [1] 49
## [1] 50
## [1] 51
## [1] 52
## [1] 53
## [1] 54
## [1] 55
## [1] 56
## [1] 57
## [1] 58
## [1] 59
## [1] 60
## [1] 61
## [1] 62
## [1] 63
## [1] 64
## [1] 65
## [1] 66
## [1] 67
## [1] 68
## [1] 69
## [1] 70
## [1] 71
## [1] 72
## [1] 73
## [1] 74
## [1] 75
## [1] 76
## [1] 77
## [1] 78
## [1] 79
## [1] 80
## [1] 81
## [1] 82
## [1] 83
## [1] 84
## [1] 85
## [1] 86
## [1] 87
## [1] 88
## [1] 89
## [1] 90
## [1] 91
## [1] 92
## [1] 93
## [1] 94
## [1] 95
## [1] 96
## [1] 97
## [1] 98
## [1] 99
## [1] 100
## [1] 101
## [1] 102
## [1] 103
## [1] 104
## [1] 105
## [1] 106
## [1] 107
## [1] 108
## [1] 109
## [1] 110
## [1] 111
## [1] 112
## [1] 113
## [1] 114
## [1] 115
## [1] 116
## [1] 117
## [1] 118
## [1] 119
## [1] 120
## [1] 121
## [1] 122
## [1] 123
## [1] 124
## [1] 125
## [1] 126
## [1] 127
## [1] 128
## [1] 129
## [1] 130
## [1] 131
## [1] 132
## [1] 133
## [1] 134
## [1] 135
## [1] 136
## [1] 137
## [1] 138
## [1] 139
## [1] 140
## [1] 141
## [1] 142
## [1] 143
## [1] 144
## [1] 145
## [1] 146
## [1] 147
## [1] 148
## [1] 149
## [1] 150
## [1] 151
## [1] 152
## [1] 153
## [1] 154
## [1] 155
## [1] 156
## [1] 157
## [1] 158
## [1] 159
## [1] 160
## [1] 161
## [1] 162
## [1] 163
## [1] 164
## [1] 165
## [1] 166
## [1] 167
## [1] 168
## [1] 169
## [1] 170
## [1] 171
## [1] 172
## [1] 173
## [1] 174
## [1] 175
## [1] 176
## [1] 177
## [1] 178
## [1] 179
## [1] 180
## [1] 181
## [1] 182
## [1] 183
## [1] 184
## [1] 185
## [1] 186
## [1] 187
## [1] 188
## [1] 189
## [1] 190
## [1] 191
## [1] 192
## [1] 193
## [1] 194
## [1] 195
## [1] 196
## [1] 197
## [1] 198
## [1] 199
## [1] 200
## [1] 201
## [1] 202
## [1] 203
## [1] 204
## [1] 205
## [1] 206
## [1] 207
## [1] 208
## [1] 209
## [1] 210
## [1] 211
## [1] 212
## [1] 213
## [1] 214
## [1] 215
## [1] 216
## [1] 217
## [1] 218
## [1] 219
## [1] 220
## [1] 221
## [1] 222
## [1] 223
## [1] 224
## [1] 225
## [1] 226
## [1] 227
## [1] 228
## [1] 229
## [1] 230
## [1] 231
## [1] 232
## [1] 233
## [1] 234
## [1] 235
## [1] 236
## [1] 237
## [1] 238
## [1] 239
## [1] 240
## [1] 241
## [1] 242
## [1] 243
## [1] 244
## [1] 245
## [1] 246
## [1] 247
## [1] 248
## [1] 249
## [1] 250
## [1] 251
## [1] 252
## [1] 253
## [1] 254
## [1] 255
## [1] 256
## [1] 257
## [1] 258
## [1] 259
## [1] 260
## [1] 261
## [1] 262
## [1] 263
## [1] 264
## [1] 265
## [1] 266
## [1] 267
## [1] 268
## [1] 269
## [1] 270
## [1] 271
## [1] 272
## [1] 273
## [1] 274
## [1] 275
## [1] 276
## [1] 277
## [1] 278
## [1] 279
## [1] 280
## [1] 281
## [1] 282
## [1] 283
## [1] 284
## [1] 285
## [1] 286
## [1] 287
## [1] 288
## [1] 289
## [1] 290
## [1] 291
## [1] 292
## [1] 293
## [1] 294
## [1] 295
## [1] 296
## [1] 297
## [1] 298
## [1] 299
## [1] 300
## [1] 301
## [1] 302
## [1] 303
## [1] 304
## [1] 305
## [1] 306
## [1] 307
## [1] 308
## [1] 309
## [1] 310
## [1] 311
## [1] 312
The following function allows to visualise the temporally consistent paths in the network starting from or ending in a node. These represent the authors who might have influenced or might have been influenced by a given author.
The function takes as inputs:
author: an author’s name or id,
analogies: TRUE/FALSE, whether analogies should be included or only contrafacta,
temporal: TRUE/FALSE if temporally consistent paths only should be considered,
forward: TRUE/FALSE if forward paths or backward paths should be considered.
path_by_author=function(author,analogies,temporal,forward){
#define nodes
{
nodes_vis<-data.frame(id=author_nodes$vertex.id,label=author_nodes$name)
}
#define edges
{
if(analogies){
edges_vis<-all_links_2
static_network<-all_static
dynamic_network<-all_dynamic
}else{
edges_vis<-contrafacta_links_2
static_network<-contrafacta_static
dynamic_network<-contrafacta_dynamic
}
edges_vis$smooth<-TRUE
}
#define igraph object and compute distances
{
static_network_igraph<-graph_from_data_frame(edges_vis, directed = TRUE, vertices=nodes_vis)
static_distances<-distances(static_network_igraph, v = V(static_network_igraph), to = V(static_network_igraph), mode = "out", weights = NULL, algorithm = "dijkstra")
}
#find id if author given as name
{
author_id<-ifelse(is.numeric(author),author,author_nodes$vertex.id[author_nodes$name==author])
author_id<-as.numeric(author_id)
}
#define group
{
if (temporal){
if(forward){
nodes_steps<-tPath(
dynamic_network,
v = author_id,
direction ="fwd"
)$gsteps
} else {
nodes_steps<-tPath(
dynamic_network,
v = author_id,
direction ="bkwd",
type="latest.depart"
)$gsteps
}
nodes_vis$group<-as.character(nodes_steps)
}else{
nodes_vis$group<-as.character(as.vector(static_distances[author_id,]))
}
}
#visuals
{
colfunc<-colorRampPalette(c("white",ifelse(analogies,"orange","red"),"black"))
color_distance<-colfunc(10)
set.seed(1234)
visNetwork(nodes_vis,edges_vis)%>%
visIgraphLayout(layout = "layout_with_fr") %>%
visGroups(groupname = "0",color=color_distance[1]) %>%
visGroups(groupname = "1",color=color_distance[2]) %>%
visGroups(groupname = "2", color=color_distance[3])%>%
visGroups(groupname = "3", color=color_distance[4])%>%
visGroups(groupname = "4", color=color_distance[5])%>%
visGroups(groupname = "5", color=color_distance[6])%>%
visGroups(groupname = "6", color=color_distance[7])%>%
visGroups(groupname = "7", color=color_distance[8])%>%
visGroups(groupname = "8", color=color_distance[9])%>%
visGroups(groupname = "9", color=color_distance[10])%>%
visGroups(groupname = "Inf", color="#333333")%>%
visOptions(
selectedBy = list(
"variable"="label",
"highlight"=TRUE
),
highlightNearest=list(
"enabled"=TRUE,
"algorithm"="hierarchical",
"degree"=list(from=0,to=0),
"labelOnly"=FALSE
)
) %>%
visLayout(randomSeed = 1234)
}
}
Example: termporally consistent forward paths for Elias de Barjols, including analogies as well as contrafacta.
path_by_author("Elias de Barjols",TRUE,TRUE,TRUE)
There is considerable uncertainty regarding the time of composition of a contrafactum or other imitation. The composition time is generally given as an interval [t1,t2] in the BdT and a choice has to be made about what value t in [t1,t2] should be taken as the onset time of the links in the temporal networks. This code shows the degree distribution and the reachability sets obtained when t is chosen to be t=t1, t=(t1+t2)/2, or t=t2. Although differences are visible, the correlation between the degree distributions as well as the correlation of the size of the reachability sets obtained when comparing any two of these choices is very high and significant. This indicates that the analysis is robust.
#degree data
contrafacta_degree_beginning<-read.csv("./robustness_results/contrafacta_degree_beginning.csv",stringsAsFactors = FALSE)
all_degree_beginning<-read.csv("./robustness_results/all_degree_beginning.csv",stringsAsFactors = FALSE)
contrafacta_degree_average<-read.csv("./robustness_results/contrafacta_degree_average.csv",stringsAsFactors = FALSE)
all_degree_average<-read.csv("./robustness_results/all_degree_average.csv",stringsAsFactors = FALSE)
contrafacta_degree_end<-read.csv("./robustness_results/contrafacta_degree_end.csv",stringsAsFactors = FALSE)
all_degree_end<-read.csv("./robustness_results/all_degree_end.csv",stringsAsFactors = FALSE)
#example correlation tests
cor.test(contrafacta_degree_beginning$in_degree, contrafacta_degree_average$in_degree, method = c("pearson", "kendall", "spearman"))
##
## Pearson's product-moment correlation
##
## data: contrafacta_degree_beginning$in_degree and contrafacta_degree_average$in_degree
## t = 294.91, df = 310, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.9977790 0.9985776
## sample estimates:
## cor
## 0.9982225
#fwd/bkwd paths data
contrafacta_fwd_bkwd_beginning<-read.csv("./robustness_results/contrafacta_fwd_bkwd_beginning.csv")
all_fwd_bkwd_beginning<-read.csv("./robustness_results/all_fwd_bkwd_beginning.csv")
contrafacta_fwd_bkwd_average<-read.csv("./robustness_results/contrafacta_fwd_bkwd_average.csv")
all_fwd_bkwd_average<-read.csv("./robustness_results/all_fwd_bkwd_average.csv")
contrafacta_fwd_bkwd_end<-read.csv("./robustness_results/contrafacta_fwd_bkwd_end.csv")
all_fwd_bkwd_end<-read.csv("./robustness_results/all_fwd_bkwd_end.csv")
#example correlation tests
cor.test(contrafacta_fwd_bkwd_beginning$fwd, contrafacta_fwd_bkwd_average$fwd, method = c("pearson", "kendall", "spearman"))
##
## Pearson's product-moment correlation
##
## data: contrafacta_fwd_bkwd_beginning$fwd and contrafacta_fwd_bkwd_average$fwd
## t = 135.46, df = 310, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.9895861 0.9933207
## sample estimates:
## cor
## 0.991659
cor.test(contrafacta_fwd_bkwd_beginning$fwd, contrafacta_fwd_bkwd_end$fwd, method = c("pearson", "kendall", "spearman"))
##
## Pearson's product-moment correlation
##
## data: contrafacta_fwd_bkwd_beginning$fwd and contrafacta_fwd_bkwd_end$fwd
## t = 101, df = 310, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.9814653 0.9880946
## sample estimates:
## cor
## 0.9851425
cor.test(all_fwd_bkwd_beginning$fwd, all_fwd_bkwd_average$fwd, method = c("pearson", "kendall", "spearman"))
##
## Pearson's product-moment correlation
##
## data: all_fwd_bkwd_beginning$fwd and all_fwd_bkwd_average$fwd
## t = 63.287, df = 310, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.9544797 0.9706179
## sample estimates:
## cor
## 0.963412
cor.test(all_fwd_bkwd_beginning$fwd, all_fwd_bkwd_end$fwd, method = c("pearson", "kendall", "spearman"))
##
## Pearson's product-moment correlation
##
## data: all_fwd_bkwd_beginning$fwd and all_fwd_bkwd_end$fwd
## t = 41.936, df = 310, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.9034926 0.9371255
## sample estimates:
## cor
## 0.9220307
#example correlation plots
my_data<-data.frame("fwd1"=contrafacta_fwd_bkwd_beginning$fwd,"fwd2"=contrafacta_fwd_bkwd_end$fwd)
ggscatter(my_data, x = "fwd1", y = "fwd2",
add = "reg.line", conf.int = TRUE,
cor.coef = TRUE, cor.method = "pearson",
xlab = "fwd_reachability", ylab = "fwd_reachability")
## `geom_smooth()` using formula 'y ~ x'